package com.arpa.wms.mapper;

import com.arpa.wms.domain.dto.ContainerDTO;
import com.arpa.wms.domain.entity.Container;
import com.arpa.wms.domain.vo.ContainerVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 容器 Mapper 接口
 * </p>
 *
 * @author LEO
 * @since 2020-08-03
 */
public interface ContainerMapper extends BaseMapper<Container> {

    /**
     * 查询列表
     * @param containerDTO
     * @return
     */
    List<ContainerVO> queryList(ContainerDTO containerDTO);
     /**
      *  @author: Allen chen
      *  @Date: 2020/10/12 10:07
      *  @Description: 根据code批量查询
      */
    List<ContainerVO> queryByCodes(@Param("list") List<String> list,@Param("groupCode")String groupCode);

     /**
      *  @author: Allen chen
      *  @Date: 2020/9/16 16:00
      *  @Description: 根据 barCode 查询
      */
    List<ContainerVO> queryByBarCode(@Param("barCode")String barCode,@Param("groupCode")String groupCode);

    /**
     * 查询合计,包含总数
     * @param containerDTO
     * @return
     */
    ContainerVO queryListSum(ContainerDTO containerDTO);

    /**
     * 根据收货单code查询该收货单下使用的容器列表
     * @param receiveCode
     * @return
     */
    List<ContainerVO> queryListByReceiveCode(@Param("receiveCode")String receiveCode);

    /**
     * 根据收货单、容器号集合拼接的字符串，释放该收货单下没有可用收货登记信息关联的容器
     * @param receiveCode
     * @param containerBarCodes
     * @param type 容器类型，空字符串： 所有； 0：托盘；1：周转箱；
     * @return
     */
    boolean batchReleaseContainerByReceive(@Param("receiveCode")String receiveCode, @Param("containerBarCodes")String containerBarCodes, @Param("type")String type, @Param("groupCode")String groupCode);

    /**
     * 根据上架单、释放该上架单使用的容器
     * @param putawayCode
     * @param type 容器类型，空字符串： 释放所有； 0：释放托盘类型的容器；1：释放周转箱类型的容器；
     * @return
     */
    boolean batchReleaseContainerByPutaway(@Param("putawayCode")String putawayCode, @Param("type")String type, @Param("groupCode")String groupCode);

    /**
     * 更新容器占用状态和占用单据编码
     * @author liuxr
     * @date 2021/4/25 16:23
     * @param barCode
     * @param occupyCode
     * @return int
     */
    int updateStatus(@Param("barCode") String barCode, @Param("occupyCode") String occupyCode, @Param("groupCode")String groupCode);
}
